home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PsL Monthly 1993 December
/
PSL Monthly Shareware CD-ROM (December 1993).iso
/
prgmming
/
dos
/
basic
/
pbtool.exe
/
PRINTDBF.BAS
< prev
next >
Wrap
BASIC Source File
|
1991-11-15
|
5KB
|
136 lines
'----------------------------------------------------------
' PROGRAM: PRINTBF.BAS PROGRAMMER: A. KELLETT
' DATE-WRITTEN: 11/14/91
' USING POWER BASIC V2.10A
'
' THIS PROGRAM READS/PRINTS THE CONTENTS OF A dBASE (TM) .DBF
' (THE DATA) FILE. DOES NOT LOOK AT INDEX (.NDX) FILES.
' VERSION: 0.00 LAST UPDATED: 00/00/00
'----------------------------------------------------------
CLS
LOCATE 1,5:INPUT "ENTER NAME OF dBASE FILE TO VIEW: ";FILENAME1$
GOSUB FILEEXISTS
LOCATE 2,5:INPUT "ENTER P TO PRINT OR D FOR DISPLAY: ";PRINTSWITCH$
MAP HEADER$$ * 32, 1 AS VERSION$$, 1 AS YEAR$$, 1 AS MONTH$$, 1 AS DAY$$,_
4 AS TOT.RECORDS$$, 2 AS HEADER.SIZE$$, 2 AS RECORD.LENGTH$$,_
20 AS FILLER$$
MAP FIELDHEADER$$ * 32, 10 AS FIELD.NAME$$, 1 AS FILLER1$$, _
1 AS FIELD.TYPE$$, 4 AS FILLER2$$, 1 AS FIELD.WIDTH$$,_
1 AS DECIMALS$$, 14 AS FILLER3$$
MAP FDATA$$ * 19, 10 AS FIELDNAME$$, 2 AS FIL1$$, 1 AS FTYPE$$,_
2 AS FIL2$$, 1 AS FWIDTH$$, 2 AS FIL3$$, 1 AS FDECIMAL$$
OPEN FILENAME1$ FOR BINARY AS #1
GET$ 1, 32, HEADER$$
X1 = ASC(LEFT$(TOT.RECORDS$$,1)):X2 = ASC(MID$(TOT.RECORDS$$,2,1))
X3 = ASC(MID$(TOT.RECORDS$$,3,1)):X4 = ASC(RIGHT$(TOT.RECORDS$$,1))
TOT.RECORDS& = X1 + (256 * X2) + (4096 * X3) + (65536 * X4)
HEADER.SIZE& = ASC(LEFT$(HEADER.SIZE$$,1))_
+ (256 * ASC(RIGHT$(HEADER.SIZE$$,1)))
RECORD.LENGTH& = ASC(LEFT$(RECORD.LENGTH$$,1))_
+ (256 * ASC(RIGHT$(RECORD.LENGTH$$,1)))
NUM.FIELDS& = ((HEADER.SIZE& - 1) \ 32) - 1
LOCATE 5,5:PRINT "dBASE VERSION: ";ASC(VERSION$$)
LOCATE 6,5:PRINT "MODIFIED YR: ";ASC(YEAR$$)
LOCATE 7,5:PRINT " MM: ";ASC(MONTH$$)
LOCATE 8,5:PRINT " DD: ";ASC(DAY$$)
LOCATE 9,5:PRINT "TOT RECORDS : ";TOT.RECORDS&
LOCATE 10,5:PRINT "HEADER SIZE : ";HEADER.SIZE&
LOCATE 11,5:PRINT "RECORD LENGTH: ";RECORD.LENGTH&
LOCATE 12,5:PRINT "NUMBER FIELDS: ";NUM.FIELDS&
DIM FIELD.DATA$(1:NUM.FIELDS&)
FOR I% = 1 TO NUM.FIELDS&
GET$ 1, 32, FIELDHEADER$$
FIELD.WIDTH% = ASC(FIELD.WIDTH$$)
FIELD.WIDTH$ = USING$("##", FIELD.WIDTH%)
IF DECIMALS$$ = CHR$(0) THEN
DECIMALS% = 0:FDECIMAL$$ = "0"
ELSE
DECIMALS% = ASC(DECIMALS$$):FDECIMAL$$ = DECIMAL$$
END IF
LOCATE 14,5:PRINT "FIELD NAME : ";FIELD.NAME$$
LOCATE 15,5:PRINT "FIELD TYPE : ";FIELD.TYPE$$
LOCATE 16,5:PRINT "FIELD WIDTH : ";FIELD.WIDTH%
LOCATE 17,5:PRINT "DECIMALS : ";DECIMALS%
LOCATE 19,5:PRINT USING " FIELD NUMBER ### ";I%
DELAY 1
FOR J% = 1 TO LEN(FIELD.NAME$$)
IF MID$(FIELD.NAME$$,J%,1) = CHR$(0) THEN
MID$(FIELD.NAME$$,J%,1) = " "
END IF
NEXT J%
FIELD.DATA$(I%) = FIELD.NAME$$ + " " + FIELD.TYPE$$ +_
" " + FIELD.WIDTH$ + " " + FDECIMAL$$
NEXT I%
CLOSE #1
LOCATE 20,1:PRINT " PRESS ANY KEY TO VIEW/PRINT FILE LAYOUT"
WHILE NOT INSTAT
WEND
'**** EITHER PRINT OR DISPLAY THE FILE LAYOUT ****
CLS
IF PRINTSWITCH$ = "P" THEN
LPRINT
LPRINT "FILE: ";FILENAME1$;" NUMBER OF RECORDS: ";TOT.RECORDS&
LPRINT "FIELDS: ";NUM.FIELDS&;" RECORD SIZE: ";RECORD.LENGTH&
ELSE
PRINT
PRINT "FILE: ";FILENAME1$;" NUMBER OF RECORDS: ";TOT.RECORDS&
PRINT "FIELDS: ";NUM.FIELDS&;" RECORD SIZE: ";RECORD.LENGTH&
END IF
FOR I = 1 TO NUM.FIELDS&
IF PRINTSWITCH$ = "P" THEN
LPRINT USING " ### ";I;:LPRINT FIELD.DATA$(I)
ELSE
PRINT USING " ### ";I;:PRINT FIELD.DATA$(I)
END IF
IF I/20 = INT(I/20) THEN
DELAY 3
END IF
NEXT I
END
'
'
'----------------------------------------------------------
FILEEXISTS:
OPEN FILENAME1$ FOR BINARY AS #1
IF LOF(1) < 1 THEN '** FILE LENGTH LESS THAN 0 **
LOCATE 15,5
PRINT "THE INPUT FILE DOES NOT EXISTS."
CLOSE #1 '** CLOSE THE NON-EXISTANT FILE **
KILL FILENAME1$ '** DELETE 0 LENGTH FILE WE'VE CREATED **
DELAY 2.5 '** PAUSE FOR USER TO READ MESSAGE **
LOCATE 22,1
END '** END PROCESSING HERE **
END IF
CLOSE #1 '** CLOSE IN CASE IT DID EXIST **
RETURN
'----------------------------------------------------------
' Information on the structure of dBASE .DBF files were
' obtained from the following two sources:
'
' dBASE III Plus Programmer's Reference Guide pp.859 - 875
' by Alan Simpson ( 1987 SYBEX Inc.) No dBASE programmer
' should ever be more than arms-length away from this book.
'
' BASIC Techniques and Utilities p. 251 by Ethan Winer
' ( 1991 Ziff-Davis Press ). Never thought about reading dBASE
' files from Turbo/PowerBasic until I stumbled over his
' easy-to-understand chapter. Did not use his code as a model.
'
'